Current electrophotographic (EP) process printers (i.e., laser printers) allow users to select (e.g., through a printer driver interface) a print mode that determines the resolution (i.e., dpi or dots per inch) and bit-depth (i.e., bits per pixel) of print jobs sent to a printer. For example, by selecting a print command from within an application program, a user can typically make print quality selections through a printer driver interface. The options may include, for example, “ProRes”, “FastRes”, and “600 dpi”. “ProRes” may provide 1200 dpi, 1 bit per pixel data, while “FastRes” may provide 600 dpi, multi-bit (e.g., 2, 4, or 8 bits) per pixel data. Thus, selection of a print mode causes a print job to be “RIP”'ed (i.e., raster image processed) or “rasterized” to a certain resolution (both horizontal and vertical) and bit-depth based on the print mode selection. The printer driver typically formats the print job in a page description language (PDL) which is then rasterized to an appropriate resolution and bit-depth on the printer.
Various algorithms are implemented in a printer ASIC (application specific integrated circuit) through image enhancement blocks that further process the rasterized data into pulse width modulation codes (Pcodes) to modulate a laser on and off as it scans an electrophotographic drum. The enhancement blocks are made up of logic gates capable of processing the rasterized data in real time. The enhancement blocks may include, for example, a REt (Resolution Enhancement technology) block, a PhotoTone block, a ResDouble block, a NEM (native enhancement mode) block, and so on. In addition to generating Pcodes to drive a laser modulation circuit, the enhancement blocks also typically perform some type of adjustment to the image data such as a smoothing or filtering function.
Moreover, each enhancement block typically processes a particular type of data, and therefore expects to see raster data in a particular format. For example, RET processes black and white data and therefore wants to see raster data formatted with a bit-depth of 1 bit per pixel. PhotoTone, however, is a half-toning algorithm used for processing gray scale images. It therefore expects to see raster data formatted in a multi-bit per pixel bit-depth.
The different data format requirements for each enhancement block present a problem of how to provide raster data in a suitable bit-depth for each block. In the past, this problem has been addressed by printer ASICs that provide multiple, two-dimensional windows (each with their own configuration) that are alternately enabled to present an appropriate view of raster data to a given enhancement block. Thus, an enhancement block that needs to process single bit per pixel data will view a window that provides only single bit per pixel data, while an enhancement block that processes multi-bit per pixel data will view a window that provides only multi-bit per pixel data. However, this approach becomes difficult when more than one or two configurations are needed. In addition, this approach requires multiplexing around the RAM in the ASIC, which creates critical timing issues and makes the ASIC more difficult to design.
The problem is further complicated by the fact that the enhancement blocks need to generate Pcode data in a certain format for the laser driver circuits (i.e., pulse width modulators). The laser drivers have requirements that are defined by the laser configuration and native resolution of the print engine. For example, some print engines have lasers that draw 1200 dpi lines in raster order, while others draw 600 dpi lines. Other resolutions are possible, but not currently common. Because the laser drivers are able to generate laser modulations with very fine horizontal resolution, input data having a lower resolution is typically converted into an equivalent higher resolution data for processing by the enhancement blocks. The laser drivers can then run at a set resolution regardless of the resolution of the input data. Thus, variations in horizontal resolutions of the input data are typically not a problem.
However, various print engines may have 1, 2, or more parallel laser beams being driven concurrently. This creates a problem regarding the vertical size (resolution) of the lines of raster data that the lasers are drawing out. The amount of raster data being drawn out or consumed by the lasers must be equivalent to the amount of raster data being read in and processed by the printer ASIC. The measure of the data is based on the area (e.g., in square inches) that the data covers. For example, the amount of data in one line of 300 dpi raster being read in is equivalent to an amount of data in two lines of data being drawn out or consumed by a dual 600 dpi laser configuration. One pass of the dual laser draws out two lines of data, each covering 1/600th of an inch, which is equivalent to the single 1/300th of an inch line of raster data being read in. If the input data resolution were 600 dpi, two lines of raster data would need to be read in to accommodate each pass of the dual 600 dpi laser configuration. Regardless of the data resolution and the print engine configuration, however, the amount of raster data being consumed must be equivalent to the amount of raster data being input.
In previous printers, these complications were addressed by developing a new ASIC design for each new printer engine configuration. Thus, a particular ASIC might be designed to accommodate several input data modes as described above, but would be limited to functioning with a specific printer engine configuration. In addition to the problems of limited data input modes and the need to design a new ASIC for each new engine configuration, this approach ignores the problem of how to support a data format mode that was not apparent at the time the printing device was defined and the ASIC was designed. Furthermore, previous approaches have the additional problem of being difficult to debug due to a significant number of RAM mappings that make tracking simulations problematic.
Accordingly, the need exists for a way to process printable data having various data formats through various enhancement functions for printing in an electrophotographic process printer having various engine configurations.